多執行緒協作時,Java提供一套內建的同步機制,包含 wait(), notify(), notifyAll(),透過這些方法,能讓執行緒之間進行溝通,避免生產過剩/消費過剩不足,讓CPU使用更有效率。
當一個執行緒執行wait(),就會釋放該物件的鎖給另一個等待進入的執行緒,同時自己會進入等待狀態,直到另一個執行緒執行notify()、notifyAll(),叫醒後再進入ready。
使用wait()的前提,是該執行緒要有該物件的鎖。
當一個執行緒執行notify(),會叫醒該物件上等待的執行緒(如果有);但如果有多個執行緒正在等待,那麼叫醒的是哪一個執行緒是不確定的。
使用notify()的前提,該執行緒也必須先擁有該物件的鎖。
notifyAll()與notify()類似,但它會叫醒該物件上等待的所有執行緒
使用notifyAll(),該執行緒必須先擁有該物件的鎖。